CONAHCYT-Universidad de Guadalajara
7 de enero de 2025
if y elseifelseR (for, while, break y next)apply y lapply)Gráficas en R base.
Recapitulación del lenguaje R.
Las estructuras de control establecen condicionales en nuestros programas. Por ejemplo, ¿qué condiciones deben cumplirse para realizar una operación? o ¿qué debe ocurrir para ejecutar una función?.
En otras palabras, determinan la lógica y el orden en el que ocurren las operaciones, en especial al definir funciones.
Las estructuras de control más usadas en R son las siguientes:
| Estructura de control | Descripción |
|---|---|
if, else |
Sí, de otro modo |
for |
Para cada uno en |
while |
Mientras |
break |
Interrupción |
next |
Siguiente |
if y elseif (si) se usa cuando queremos que una operación se ejecute unicamente cuando se cumple una condición.if y elsesi, iniciamos nuestra función con if():() insertamos la condición que queremos evaluar:{} para definir el código que queremos que se ejecute cuando se cumple la condición:if y elseelse{} para establecer la acción a ejecutar si no se cumple la condición:La identación es importante así como el uso correcto de {}.
Finalmente, si nos interesa que se muestre en la pantalla el resultado usamos la función print() o return().
Para usar nuestro condicionale debemos definir los argumentos de entrada (numero).
if y else05:00
if y else.
En R podemos vectorizar el condicional usando la función ifelse().
En lugar de escribir una línea de código para cada comparación, podemos usar una sola llamada a esta función, que se aplicará a cada elemento de un vector.
Esta función tiene la siguiente estructura:
ifelse()ifelse() para saber si los número en un vector son pares o nones:R, los bucles (loop) son estructuras de control de flujo que permiten repetir un bloque de código de forma cíclica ya sea un determinado número de veces o hasta que se cumpla una condición.forfor nos permite ejecutar un bucle ( loop ) realizando una operación para cada elemento de un conjunto de datos.R:
{}.forLas operaciones en un bucle for se realizan pero sus resultados nunca son devueltos automáticamente, es necesario pedirlos de manera explícita.
Una solución para mostrar los resultados de un bucle for es usar la función print().
print() sólo mostrará los resultados de las operaciones en la consola, no los asignará a un objeto.for a un objeto, usamos índices.R el primer elemento de un bucle siempre es identificado con el número 1, y se realizarán las operaciones hasta llegar al total de elementos que especifiquemos:forfor podemos generar un objeto vacío:for y vectorizaciónfor pueden obtenerse vectorizando la operación:R el uso de bucles for son poco populares ya que es más rápido y sencillo vectorizar las operaciones.whileEste es un tipo de bucle que ocurre mientras una condición es verdadera (TRUE). La operación se realiza hasta que se llega a cumplir un criterio previamente establecido.
La sintaxis de whilees la siguiente:
R:
whileProbemos sumar +1 a un valor, mientras que este sea menor que 5.
Advertencia
¡Ten cuidado de crear bucles infinitos! Si ejecutas una condición que nunca será FALSE, este nunca se detendra.
ESC para detener su ejecución. De otra forma, podría congelarse tu equipo.break y nextEn R las palabras break y next son palabras reservadas. Es decir, NO podemos asignarle nuevos valores y realizan una acción específica cuando aparecen en nuestro código.
break nos permite interrumpir un bucle.
next nos deja avanzar a la siguiente iteración saltándose la actual.
Ambas funciones pueden ser utilizadas en bucles de tipo for y while.
breakInterrumpimos un for cuando i es igual a 3, aunque aún queden 7 elementos en el objeto.
breakwhile antes de se cumpla la condición de que numero sea mayor a 5, en cuanto este tiene el valor de 15.nextPor su parte, usamos next para “saltarnos” una iteración en un bucle. Cuando la condición se cumple, esa iteración es omitida.
applyapplyLa familia de funciones apply es usada para aplicar una función a cada elemento de una estructura de datos (i.e., matrices, dataframes, arrays y listas).
Con esta familia de funciones podemos automatizar tareas complejas usando pocas líneas de código.
En el paradigma de R, la familia de funciones apply reciben como argumentos un objeto y al menos una función.
En este curso trabajaremos únicamente con las funciones más generales y de uso común de esta familia:
apply()lapply()apply()apply() aplica una función a todos los elementos de una matriz. - La estructura de esta función es la siguiente:
X: Una matriz o un objeto que puede coercionarse como matriz (dataframe).MARGIN: La dimensión (margen) que agrupará los elementos de la matriz X, para aplicar una función. 1 se refiere a las filas y 2 son columnas.FUN: La función que queremos aplicar al objeto X en su dimensión MARGIN.apply()data("mtcars") # Importamos datos de ejemplo
?mtcars
head(mtcars)
apply(mtcars,2,mean) # Promedio por columna
apply(mtcars,2,max) # Maximo por columna
apply(mtcars,2,min) # Mínimo por columna
# Ejemplo de uso de matrices
m <- matrix(seq(1:16), nrow = 4, ncol = 4)
m
apply(m, 1, min) # Mínimo por filasapply()También podemos definir funciones dentro de la función apply() y aplicarlas tanto por filas como por columnas:
apply() nos devuelve objetos del mismo tipo al que la función fue aplicadalapply()lapply() está diseñada para aplicar funciones a todos los elementos de una lista (por eso l).
X es una lista u objeto coercionable a una lista.FUN es la función a aplicar.MARGIN porque las listas son estructuras unidimensionales que solo tienen largo.lapply()PIBE_2020-2023.xlsx.R. Nota: Usa los botones del panel Environment.Usando la función apply() calcula el valor promedio del PIB de cada estado para el período 2020-2023. Guarda el resultado en una nueva variable denominada PIBE_promedio en el mismo dataframe.
Usando la función lapply() calcula el valor aproximado del PIB nacional para cada año. Guarda el resultado en una nueva variable denominada PIB_Nacional. Nota: Supon que puedes aproximar el valor del PIB nacional sumando el valor de los PIBE’s.
R basePor defecto, R tiene un sistema de generación de gráficos poderoso y flexible. Sin embargo, al inicio su uso puede resultar complejo.
En esta sección revisaremos como crear gráficas usando R base y algunos parámetros que podemos ajustar para mejorar su presentación.
Al crear gráficas, notarás que ponemos en práctica todo lo que hemos visto hasta ahora incluyendo importar datos, hacer subconjuntos de objetos y usar funciones.
En esta sección trabajaremos de forma simultánea usando estas diapositivas y una práctica guíada Enlace
plot()La función plot() puede ser usada de forma general para crear gráficos.
Esta función tiene un comportamiento especial. Dependiendo del tipo de datos que ingresemos como argumento generará diferentes tipos de gráfica.
Para cada tipo de gráfico podemos ajustar diferentes parámetros que controlan su aspecto.
Sintáxis básica:
Donde:
type: El tipo de puntos a dibujar. ?plot()plot()Relación entre el peso (wt) y la eficiencia en el uso de combustible (mpg) de un conjunto de vehículos en el dataset mtcars.
plot()Dependiendo del tipo de datos que ingresemos como argumentos a la función plot() obtendremos distintos tipos de gráficos:
x |
y |
Gráfico |
|---|---|---|
| Continuo | Continuo | Diagrama de dispersión (scatterplot) |
| Continuo | Discreto | Diagrama de dispersión |
| Continuo | Ninguno | Diagrama de dispersión por renglón |
| Discreto | Continuo | Diagrama de caja (Box plot) |
| Discreto | Discreto | Gráfico de mosaico (Diagrama de Kinneman) |
| Discreto | Ninguno | Gráfico de barras |
| Ninguno | Cualquiera | Error |
barplot()La función barplot()se utiliza para crear gráficos de barras.
Permite visualizar distribuciones de frecuencias, comparar entre categorías o cualquier otro conjunto de datos categóricos.
Sintáxis básica:
height: Tabla de frecuencias.beside = TRUE: Indica que las barras de dibujarán lado a lado.col = Especifica el color de las barras.main, ylab, xlab: Titulo para los gráficos del eje.barplot()legend()Las leyendas son usadas para identificar con mayor claridad los distintos elementos en un gráfico, tales como colores y formas.
En R usamos la función legend() para generar leyendas. Esta función debe ser llamada después de crear un gráfico.
En cierto modo es una anotación a un gráfico ya existente.
legend() es una función relativamente compleja, así que sólo revisaremos lo esencial.
Sintáxis básica:
leyenda: Etiquetas de datos que queremos escribir en la leyenda.fill: Los colores que acompañan a las etiquetas definidas con leyenda. - "x,y": Las coordenadas en pixeles en donde se ubicará la leyenda.title: Titulo de la leyenda.hist()Los histogramas son gráficas que nos permiten observar la distribución de datos númericos usando barras.
Cada barra representa el número de veces (frecuencia) que se observaron datos en un rango determinado.
Para generar un histograma nosotros podemos usar la función hist() que pide como argumento (obligatorio) un vector x de tipo numérico.
Sintáxis básica de uso:
x: es un vector de valores numérico.hist()RR nos permite visualizar una figura a la vez. Cuando hacemos un nuevo gráfico perdemos el anterior.par() nos permite crear una “matriz” detrás de escena para colocar múltiples gráficas en el motor visual.Para exportar un gráfico usamos alguna de las siguientes funciones, cada una corresponde con un tipo de archivo distinto. No son las únicas, pero son las más usadas.
bpm()
jpeg()
pdf()
png()
tiff()
Cada una de estas funciones tiene los siguientes argumentos tres argumentos principales.
filename: El nombre y ruta del archivo de imagen a crear. Si no especificamos una ruta completa, entonces el el archivo será creado en nuestro directorio de trabajo.
width: El ancho del archivo de imagen a crear, por defecto en pixeles.
height: El alto del archivo de imagen a crear, por defecto en pixeles.
R base[ ]
Indexar elementos en objetos.
( )
Pasar argumentos a funciones.
{ }
Definir acciones de condicionales, funciones, bucles, etc.
R¿Qué tipo de datos conocemos?
numericcharacterfactorlogical¿Cómo podemos encontrar datos faltantes?
NA (No disponible)NULL (No existe)" " (Campo vacío)R¿Qué tipos de estructuras de datos existen?
vector (1-D)dataframe (2-D)list (M-D)¿Qué funciones hemos usado?
c()is.na()mean()apply()if-statmentsfunctionfor/ while-loop?mean() o help("mean").